这一部分介绍单页应用框架所依赖的基础技术和原理。经过这一部分的学习,你应该可以了解到一个单页应用,或者说一个单页应用框架是如何运作的。掌握一个单页应用各个组成部分,在平时开发时可以更好地甄别框架和组件,游刃有余地进行开发。
单页应用的出现不可考。从 Wikipedia 上可以看到,起源很早,甚至可以追溯到2002年。你可能会说,这不是什么新概念,Google 的 Gmail 就是一个单页应用,可追溯到2004年到2005年。但这个概念火热起来在2010年,Backbone 问世之后。随着后来的 Knockout、Ember.js、AngularJS 的兴起,单页应用开始家喻户晓起来。2015年 React 的出现,Virtual DOM 横扫了各种 MV* 框架,单页应用框架甚至进入到了一个新的时代,甚至与函数式编程结合到了一起。比如 Angular 2 与 RxJS 的结合,React 与 Redux 的结合等等。
为了说清楚什么是单页应用,我们先来看看传统的网页应用是什么样子的。
目前绝大部分的网站都还采用这种形式。单个 HTML 页面作为功能元件,通过刷新,超链接、表单提交等方式,组合排列这些 HTML 页面,来为用户提供服务。作为网页应用的传统形式长久不衰,很多流行的开发框架都以之作为范式设计的。比如 Ruby on Rails,Spring MVC,Express 等等。
在传统的网页应用中,浏览器更多的是充当一个展示层,路由处理、服务调用、页面跳转流程都由服务端来处理。即 MVC 都放在服务器端,而 V 作为用户界面则通过网络发送到浏览器端,作为 UI 与用户交互。
这样的范式有以下特点:
当然,上面表达的是一种普遍的范式,而 Ajax 则是这个范式的异类。Ajax 的出现使得网页可以局部更新,使得网页上的一部分可以作为一个功能元件来为用户提供服务。这种形式的网页应用已经具备单页应用的雏型,但并不是标准的单页应用。
相较于传统网页应用,单页应用将 MVC 前置到了浏览器端:
看上去有点类似于客户端(Android、iOS)开发,交互全都放在客户端,服务端仅仅提供 API。
每种技术都有其利弊,单页应用也是如此。我们先说说好的地方:
单页应用的优点有时候也是缺点:
在笔者看来,单页应用是对原来 Ajax 组件的一种延伸,相较于传统的网页应用,将 MVC 前置到了浏览器端,浏览器就相当于 iOS 系统,单页应用就像是应用,与服务端仅仅通过 API 来沟通。每种技术方案都有利弊,是否要使用单页应用技术,需要通过对产品需求(跨平台、SEO、性能、用户群属性?)、资源(工程师配比,能力?)时间要求等的评估来做出选择。
接下来,我们先从单页应用的视图开始学习,看看前端工程师最熟悉的组件,在单页应用中是什么样子的!